package org.ciallo.easytokencore.error;

import org.ciallo.easytokencore.exception.EasyTokenException;

/**
 * Easy-Token 错误码定义接口
 *
 * <p>错误码规范：</p>
 * <ul>
 *   <li>CODE_UNDEFINED(-1): 未定义错误码</li>
 *   <li>7xx系列: Token相关错误码</li>
 *   <li>8xx系列: JWT校验相关错误码</li>
 *   <li>9xx系列: Cookie相关错误码</li>
 * </ul>
 *
 * <p>使用说明：</p>
 * <ol>
 *   <li>所有错误码必须在此接口中统一定义</li>
 *   <li>错误码需按业务分类并保持连续性</li>
 *   <li>新错误码应遵循现有分类规则</li>
 * </ol>
 *
 * <p>使用示例：</p>
 * <pre>
 * {@code
 * throw new EasyTokenException("Token无效")
 *     .setCode(EasyErrorCode.CODE_INVALID_TOKEN);
 * }
 * </pre>
 *
 * @Description: Easy-Token 错误码定义接口
 * @Author: Jukomu
 * @Package: org.ciallo.easytokencore.error
 * @Project: easy-token-demo
 * @Version: 1.0.0
 * @name: EasyErrorCode
 * @Date: 2025-05-06
 * @Filename: EasyErrorCode
 * @see EasyTokenException
 */
public interface EasyErrorCode {
    /**
     * 代表这个异常在抛出时未指定异常细分状态码
     */
    int CODE_UNDEFINED = -1;

    // ------------

    /**
     * 登录失败
     */
    int CODE_LOGIN_FAILED = 600;

    // ------------

    /**
     * Token校验未通过
     */
    int CODE_INVALID_TOKEN = 799;

    /**
     * 算法不匹配
     */
    int CODE_ALGORITHM_MISMATCH_EXCEPTION = 800;

    /**
     * 签名不一致
     */
    int CODE_SIGNATURE_VERIFICATION_EXCEPTION = 801;

    /**
     * 令牌过期
     */
    int CODE_TOKEN_EXPIRED_EXCEPTION = 802;

    /**
     * 失效payload
     */
    int CODE_INVALID_CLAIM_EXCEPTION = 803;

    /**
     * 无效的发行商
     */
    int CODE_INVALID_ISSUER = 804;

    /**
     * 无token
     */
    int CODE_NULL_TOKEN = 805;

    // --------------

    /**
     * 构建 Cookie 时缺少 name 参数
     */
    int CODE_COOKIE_MISSING_NAME = 900;

    /**
     * 构建 Cookie 时缺少 value 参数
     */
    int CODE_COOKIE_MISSING_VALUE = 901;
}
